/*
	Copyright (C) 2010 2011 Rémi Thebault

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include <QFile>
#include <QTextStream>

#include <procycle/file_storable.h>

namespace PC {

	void
	FileStorable::loadFromFile(const QString& filename) {
		QDomDocument doc;
		QFile file (filename);
		if (!(	file.exists() &&
				file.open(QIODevice::ReadOnly) &&
				doc.setContent(&file))) {
			throw FileError();
		}
		file.close();
		QDomElement root = doc.documentElement();
		loadFromElement(root);
	}

	void
	FileStorable::saveToFile(const QString& filename) const {
		QFile file(filename);
		if (file.open(QFile::WriteOnly)) {
			QTextStream out(&file);
			QDomDocument doc;
			doc.appendChild(doc.createProcessingInstruction("xml",
					 "version=\"1.0\" encoding=\"UTF-8\""));

			QDomElement root = saveToElement(doc);
			doc.appendChild(root);
			out << doc.toString(3).toUtf8();
		}
		else {
			throw FileError();
		}
	}

}
